package com.atguigu.spzx.manager.Utils;

import com.atguigu.spzx.model.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

//封装树形菜单的数据
public class MenuHelper {

    //递归实现封装过程
    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
        //sysMenuList所有菜单集合
        //创建list集合，用于封装最终的数据
        List<SysMenu> trees = new ArrayList<>();
        //遍历所有的菜单集合
        //找到递归操作的入口（第一层菜单） 条件：parentId=0
        for (SysMenu sysMenu : sysMenuList) {
            if (sysMenu.getParentId() == 0){
                trees.add(findChildren(sysMenu,sysMenuList));
            }
        }
        return trees;
    }

    //递归查找下层菜单
    private static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
        //SysMenu有属性， private List<SysMenu> children;封装下一层数据
        sysMenu.setChildren(new ArrayList<>());
        //递归查询第一层下面有没有子菜单
        for (SysMenu menu : sysMenuList) {
            //判断第一层的id和 parentId是否相同
            if (sysMenu.getId().longValue() == menu.getParentId().longValue()){
                //menu是下一层数据，进行封装
                sysMenu.getChildren().add(findChildren(menu,sysMenuList));
            }
        }

        return sysMenu;
    }
}
